﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace WindowsGame1
{
    class GerenciadorAsteroide
    {
        public static List<Asteroide> lista = new List<Asteroide>();

        static Texture2D textura;
        static GameWindow gw;

        static int QUANT_MAX = 10;
        //static int QUANT_MIN = 1;

        Rectangle recColisao;

        
        public Rectangle recColisaoAsteroide
        {
            get
            {
                return recColisao;
            }
        }

        public List<Asteroide> ListaAsteroide
        {
            get
            {
                return lista;
            }
        }

        public GerenciadorAsteroide(Texture2D textura, GameWindow gw)
        {
            GerenciadorAsteroide.textura = textura;
            GerenciadorAsteroide.gw = gw;
           
        }

        public void Update(GameTime gameTime)
        {
            //no início coloca a quantidade mínima de asteróides na tela
            //if (lista.Count < QUANT_MIN)
            //{
            //    lista.Add(new Asteroide(GerenciadorAsteroide.textura, GerenciadorAsteroide.gw));
            //}

            //se a quantidade de asteroides for menor do que a máxima e maior do que a mínima, cria asteroides
            if ((lista.Count < QUANT_MAX) /*|| (lista.Count <= QUANT_MIN)*/)
            {
                lista.Add(new Asteroide(GerenciadorAsteroide.textura, GerenciadorAsteroide.gw));
            }

            //atualizar todos os asteróides que existirem na tela
            for (int i = 0; i < lista.Count; i++)
            {
                recColisao = recColisaoAsteroide;
                lista[i].Update(gameTime);

                //fazer os asteroides serem removidos da lista quando estes sairem da tela
                if ((lista[i].Posicao.Y > gw.ClientBounds.Height) || (lista[i].visivel == false))
                {
                    lista.Remove(lista[i--]);
                }
            }
        }

        public void Draw(SpriteBatch spriteBatch)
        {
            foreach (Asteroide asteroide in lista)
            {
                asteroide.Draw(spriteBatch);
            }
        }
    }
}
